package coalition.formation;

import java.util.List;

public interface PopulationInterface {

	//public static PopulationInterface getPopulationInstance(int[] dimensions, UtilityProvider utilityProvider);
	
	//return partitions in lexically specified form
	public List<int[]> getCore(int attributeIndex);
	public List<int[]> getSplitProofPartitions(int attributeIndex);
	public List<int[]> getMergeProofPartitions(int attributeIndex);
	public List<int[]> getMergeProofSplitProofPartitions(int attributeIndex);
	public List<int[]> getNoTreatPartitions(int attributeIndex);
	
	//return partitions in list form but only according to the specified attribute
	//the integer arrays here represent unions of categories for an attribute
	//and therefore have variable length for a given population
	public List<List<int[]>> getCoreInListForm(int attributeIndex);
	public List<List<int[]>> getSplitProofPartitionsInListForm(int attributeIndex);
	public List<List<int[]>> getMergeProofPartitionsInListForm(int attributeIndex);
	public List<List<int[]>> getMergeProofSplitProofPartitionsInListForm(int attributeIndex);
	public List<List<int[]>> getNoTreatPartitionsInListForm(int attributeIndex);	
	
	//return partitions expanded into cross sections
	//the integer arrays here represent cross sections
	//and therefpre have fixed length for a given population
	public List<List<List<int[]>>> getCoreByCrossSection(int attributeIndex);
	public List<List<List<int[]>>> getSplitProofPartitionsByCrossSection(int attributeIndex);
	public List<List<List<int[]>>> getMergeProofPartitionsByCrossSection(int attributeIndex);
	public List<List<List<int[]>>> getMergeProofSplitProofPartitionsByCrossSection(int attributeIndex);
	public List<List<List<int[]>>> getNoTreatPartitionsByCrossSection(int attributeIndex);		
	
}